const axios = require('axios');
const qs = require('qs');
const Vue = require('vue');
const NProgress = require('nprogress');
var proTools = {
    /*公共值*/
    config: {
        "bathUrl": process.env.API_HOST + '/api/', //请求的Url
        "IsWeiXin": navigator.userAgent.indexOf('MicroMessenger') > -1, //是否为微信内核
        "IsIos": navigator.userAgent.indexOf('Mac OS X') > -1, //是否为ios
        "IsAnd": navigator.userAgent.indexOf('Android') > -1, //是否为安卓
    },

    /*封装 axios*/
    AXIOS: function(json) {
        var _this = this;
        NProgress.start();
        axios({
            url: this.config.bathUrl + json.url,
            method: json.type || "post", //请求方法   默认为 post请求
            transformRequest: [function(data) { //请求的参数
                data = qs.stringify(json.transformRequest);
                return data;
            }],
            timeout: 30000, //超时时间
            responseType: 'json', // 默认的
            headers: {'X-Auth-Token': window.localStorage.getItem('token')}
        }).then(function(res) {
            if(res.data.code == 0){
                json.success(res);
                NProgress.done();
            }else if(res.data.code == 403){
                Vue.default.prototype.$toast({message:res.data.msg, position: 'bottom',duration: 2000})
                // window.location.href = '#/login';
                NProgress.done();
            }else if(res.data.code == 410){
                json.stock(res);
                Vue.default.prototype.$toast({message: res.data.msg, position: 'bottom',duration: 5000});
                NProgress.done();
            }else{
                json.error(res)
                Vue.default.prototype.$toast({message: res.data.msg, position: 'bottom',duration: 5000});
                NProgress.done();
            }
            //请求成功 or 请求失败
        }).catch(function(res) {
            Vue.default.prototype.$toast({message:'网络请求失败', position: 'bottom',duration: 2000})
            //网络请求失败
        })
    },

    //图片上传，转换成base64位
    fileUploadImg: function(json) {
        var _this = this;
        var file = json.e.target.files[0];
        if (typeof FileReader === 'undefined') {
            Vue.default.prototype.$toast({message: '抱歉，您的浏览器版本较低，暂不支持上传，请升级！', position: 'bottom',duration: 3000});
        } else if (file.size > 1024 * 1024 * 2) {
            Vue.default.prototype.$toast({message: '文件大小不能超出5M！', position: 'bottom',duration: 3000});
        } else {
            if (!/image\/\w+/.test(file.type)) {
                Vue.default.prototype.$toast({message: '上传文件必须为图片格式！', position: 'bottom',duration: 3000});
                return false;
            } else {
                var reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onprogress = function() { //正在读取
                    NProgress.start();
                }
                reader.addEventListener("load", function(result) { //成功读取
                    //使用canvas进行图片压缩
                    var image = new Image();
                    image.src = result.target.result;
                    image.onload = function() {
                        var canvas = document.createElement('canvas');
                        canvas.width = image.width;
                        canvas.height = image.height;
                        var ctx = canvas.getContext('2d');
                        ctx.drawImage(image, 0, 0, image.width, image.height);
                        result = canvas.toDataURL('image/jpeg', .5);
                        _this.AXIOS({
                            url: json.url,
                            transformRequest: {
                                type: json.type,
                                filedata: result.split(":")[1],
                            },
                            success: function(res) {
                                // json.ImgName(result); //当请求成功时返回base64位图片
                                json.dataSuccess(res);
                                Vue.default.prototype.$toast.success('上传成功');
                            },
                            error: function(res) {
                                var arr = []
                                for (var key in res.data.msg) {
                                    arr.push(res.data.msg[key])
                                }
                                Vue.default.prototype.$toast({message: arr.join("，"), position: 'bottom',duration: 3000});
                            }
                        })
                    }
                }, false)
            }
        }
    },

    /*原生js获取tab选项卡*/
    tabSwitch:function(json){
        for(var i = 0; i < json.li.length; i++ ){
             json.li[i].index = i;
             json.li[i].onclick = function(){
                for(var j = 0; j <  json.li.length; j++){
                     json.li[j].className = "";
                }
                 json.li[this.index].className='active';
            }
        }
    },

    /*清除 localStorage 信息*/
    removeLocalStorageData:function(){
        window.localStorage.removeItem("token");
        window.localStorage.removeItem("nick");
        window.localStorage.removeItem("user_id");
        window.localStorage.removeItem("referid");
    },

    /*表单验证*/
    regCombination: {
        null: new RegExp("^[\\w\\W]+$"), //不能为空且
        number: new RegExp("^\\d+(\\.\\d+)?$"), //请填写数字
        special: new RegExp("^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w\\.\\s]+$"), //不能输入特殊字符
        chinese: new RegExp("^[\u4e00-\u9fa5]{0,}$"), //中文验证
        phone: new RegExp("^13[0-9]{9}$|14[0-9]{9}$|15[0-9]{9}$|17[0-9]{9}$|16[0-9]{9}$|18[0-9]{9}$"), //验证手机号码
        email: new RegExp("^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"), //邮箱地址格式
        id: new RegExp("(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)"), //验证身份证
        bank: new RegExp("/^(\d{16}|\d{19})$/"), //验证银行卡
        url: new RegExp("^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$"), //验证网址
        password: new RegExp(/(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{6,15}$/), //登录密码" 6-32位数字、字母中的两种或以上
    },
}
exports.tools = proTools; //require 用来加载代码，而 exports 和 module.exports 则用来导出代码。
